{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第三次实战：TensorFlow-Keras构建深度神经网络分类模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2.0.0\n",
      "sys.version_info(major=3, minor=6, micro=10, releaselevel='final', serial=0)\n",
      "matplotlib 3.1.2\n",
      "numpy 1.18.1\n",
      "pandas 0.25.3\n",
      "sklearn 0.22.1\n",
      "tensorflow 2.0.0\n",
      "tensorflow_core.keras 2.2.4-tf\n"
     ]
    }
   ],
   "source": [
    "# 导入\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import sklearn\n",
    "import pandas as pd\n",
    "import os\n",
    "import sys\n",
    "import time\n",
    "import tensorflow as tf\n",
    "from tensorflow import keras\n",
    "\n",
    "print(tf.__version__)\n",
    "print(sys.version_info)\n",
    "for module in mpl,np,pd,sklearn,tf,keras:\n",
    "    print(module.__name__,module.__version__)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 实战开始"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 数据读取和展示"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(5000, 28, 28) (5000,)\n",
      "(55000, 28, 28) (55000,)\n",
      "(10000, 28, 28) (10000,)\n"
     ]
    }
   ],
   "source": [
    "# 导入数据集fashion mnist\n",
    "fashion_mnist = keras.datasets.fashion_mnist\n",
    "(x_train_all,y_train_all),(x_test,y_test) = fashion_mnist.load_data()\n",
    "x_valid,x_train = x_train_all[:5000],x_train_all[5000:]\n",
    "y_valid,y_train = y_train_all[:5000],y_train_all[5000:]\n",
    "\n",
    "print(x_valid.shape,y_valid.shape)\n",
    "print(x_train.shape,y_train.shape)\n",
    "print(x_test.shape,y_test.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 数据归一化\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "scaler = StandardScaler()\n",
    "x_train_scaled = scaler.fit_transform(\n",
    "    x_train.astype(np.float32).reshape(-1,1)).reshape(-1,28,28)\n",
    "x_valid_scaled = scaler.transform(\n",
    "    x_valid.astype(np.float32).reshape(-1,1)).reshape(-1,28,28)\n",
    "x_test_scaled = scaler.transform(\n",
    "    x_test.astype(np.float32).reshape(-1,1)).reshape(-1,28,28)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 深度神经网络构建"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = keras.models.Sequential()\n",
    "# 构建模型\n",
    "model.add(keras.layers.Flatten(input_shape=[28,28]))\n",
    "for _ in range(20):\n",
    "    model.add(keras.layers.Dense(100, activation='relu'))\n",
    "model.add(keras.layers.Dense(10, activation='softmax'))\n",
    "\n",
    "# 模型编译，固化模型\n",
    "model.compile(loss='sparse_categorical_crossentropy',\n",
    "              optimizer='sgd',\n",
    "              metrics=['accuracy'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "flatten (Flatten)            (None, 784)               0         \n",
      "_________________________________________________________________\n",
      "dense (Dense)                (None, 100)               78500     \n",
      "_________________________________________________________________\n",
      "dense_1 (Dense)              (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_2 (Dense)              (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_3 (Dense)              (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_4 (Dense)              (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_5 (Dense)              (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_6 (Dense)              (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_7 (Dense)              (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_8 (Dense)              (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_9 (Dense)              (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_10 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_11 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_12 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_13 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_14 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_15 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_16 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_17 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_18 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_19 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_20 (Dense)             (None, 10)                1010      \n",
      "=================================================================\n",
      "Total params: 271,410\n",
      "Trainable params: 271,410\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 55000 samples, validate on 5000 samples\n",
      "Epoch 1/10\n",
      "55000/55000 [==============================] - 13s 232us/sample - loss: 2.0883 - accuracy: 0.2300 - val_loss: 1.1854 - val_accuracy: 0.4528\n",
      "Epoch 2/10\n",
      "55000/55000 [==============================] - 11s 207us/sample - loss: 0.9272 - accuracy: 0.6212 - val_loss: 0.6468 - val_accuracy: 0.7752\n",
      "Epoch 3/10\n",
      "55000/55000 [==============================] - 12s 210us/sample - loss: 0.6012 - accuracy: 0.7955 - val_loss: 0.5099 - val_accuracy: 0.8370\n",
      "Epoch 4/10\n",
      "55000/55000 [==============================] - 11s 208us/sample - loss: 0.4775 - accuracy: 0.8378 - val_loss: 0.4640 - val_accuracy: 0.8442\n",
      "Epoch 5/10\n",
      "55000/55000 [==============================] - 11s 207us/sample - loss: 0.4222 - accuracy: 0.8551 - val_loss: 0.4479 - val_accuracy: 0.8482\n",
      "Epoch 6/10\n",
      "55000/55000 [==============================] - 13s 232us/sample - loss: 0.3835 - accuracy: 0.8671 - val_loss: 0.4008 - val_accuracy: 0.8630\n",
      "Epoch 7/10\n",
      "55000/55000 [==============================] - 12s 223us/sample - loss: 0.3592 - accuracy: 0.8745 - val_loss: 0.4198 - val_accuracy: 0.8524\n",
      "Epoch 8/10\n",
      "55000/55000 [==============================] - 12s 226us/sample - loss: 0.3387 - accuracy: 0.8802 - val_loss: 0.3924 - val_accuracy: 0.8732\n",
      "Epoch 9/10\n",
      "55000/55000 [==============================] - 11s 206us/sample - loss: 0.3238 - accuracy: 0.8855 - val_loss: 0.3567 - val_accuracy: 0.8752\n",
      "Epoch 10/10\n",
      "55000/55000 [==============================] - 11s 206us/sample - loss: 0.3078 - accuracy: 0.8906 - val_loss: 0.3674 - val_accuracy: 0.8758\n"
     ]
    }
   ],
   "source": [
    "# 回调函数\n",
    "# 定义文件夹和文件\n",
    "logdir = os.path.join('dnn-callbacks')\n",
    "if not os.path.exists(logdir):\n",
    "    os.mkdir(logdir)\n",
    "output_model_file = os.path.join(logdir,'fashion_mnist_model.h5')\n",
    "\n",
    "# 定义回调函数\n",
    "callbacks = [\n",
    "    keras.callbacks.TensorBoard(log_dir=logdir,profile_batch = 100000000),\n",
    "    keras.callbacks.ModelCheckpoint(output_model_file,save_best_only=True),\n",
    "    keras.callbacks.EarlyStopping(patience=5,min_delta=1e-3),\n",
    "]\n",
    "history = model.fit(x_train_scaled,y_train,epochs=10,\n",
    "                             validation_data=(x_valid_scaled,y_valid),\n",
    "                             callbacks=callbacks)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 画图展示学习曲线图\n",
    "def plot_learning_curves(history):\n",
    "    pd.DataFrame(history.history).plot(figsize=(8,5))\n",
    "    plt.grid(True)\n",
    "    plt.gca().set_ylim(0,2.2)\n",
    "    plt.show()\n",
    "    \n",
    "plot_learning_curves(history)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "# 在测试集上进行指标评估\n",
    "model.evaluate(x_test_scaled,y_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 实现批归一化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = keras.models.Sequential()\n",
    "# 构建模型\n",
    "model.add(keras.layers.Flatten(input_shape=[28,28]))\n",
    "for _ in range(20):\n",
    "    model.add(keras.layers.Dense(100, activation='relu'))\n",
    "    # 添加批归一化层\n",
    "    model.add(keras.layers.BatchNormalization())\n",
    "model.add(keras.layers.Dense(10, activation='softmax'))\n",
    "\n",
    "# 模型编译，固化模型\n",
    "model.compile(loss='sparse_categorical_crossentropy',\n",
    "              optimizer='sgd',\n",
    "              metrics=['accuracy'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential_1\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "flatten_1 (Flatten)          (None, 784)               0         \n",
      "_________________________________________________________________\n",
      "dense_21 (Dense)             (None, 100)               78500     \n",
      "_________________________________________________________________\n",
      "batch_normalization (BatchNo (None, 100)               400       \n",
      "_________________________________________________________________\n",
      "dense_22 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "batch_normalization_1 (Batch (None, 100)               400       \n",
      "_________________________________________________________________\n",
      "dense_23 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "batch_normalization_2 (Batch (None, 100)               400       \n",
      "_________________________________________________________________\n",
      "dense_24 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "batch_normalization_3 (Batch (None, 100)               400       \n",
      "_________________________________________________________________\n",
      "dense_25 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "batch_normalization_4 (Batch (None, 100)               400       \n",
      "_________________________________________________________________\n",
      "dense_26 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "batch_normalization_5 (Batch (None, 100)               400       \n",
      "_________________________________________________________________\n",
      "dense_27 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "batch_normalization_6 (Batch (None, 100)               400       \n",
      "_________________________________________________________________\n",
      "dense_28 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "batch_normalization_7 (Batch (None, 100)               400       \n",
      "_________________________________________________________________\n",
      "dense_29 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "batch_normalization_8 (Batch (None, 100)               400       \n",
      "_________________________________________________________________\n",
      "dense_30 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "batch_normalization_9 (Batch (None, 100)               400       \n",
      "_________________________________________________________________\n",
      "dense_31 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "batch_normalization_10 (Batc (None, 100)               400       \n",
      "_________________________________________________________________\n",
      "dense_32 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "batch_normalization_11 (Batc (None, 100)               400       \n",
      "_________________________________________________________________\n",
      "dense_33 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "batch_normalization_12 (Batc (None, 100)               400       \n",
      "_________________________________________________________________\n",
      "dense_34 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "batch_normalization_13 (Batc (None, 100)               400       \n",
      "_________________________________________________________________\n",
      "dense_35 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "batch_normalization_14 (Batc (None, 100)               400       \n",
      "_________________________________________________________________\n",
      "dense_36 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "batch_normalization_15 (Batc (None, 100)               400       \n",
      "_________________________________________________________________\n",
      "dense_37 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "batch_normalization_16 (Batc (None, 100)               400       \n",
      "_________________________________________________________________\n",
      "dense_38 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "batch_normalization_17 (Batc (None, 100)               400       \n",
      "_________________________________________________________________\n",
      "dense_39 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "batch_normalization_18 (Batc (None, 100)               400       \n",
      "_________________________________________________________________\n",
      "dense_40 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "batch_normalization_19 (Batc (None, 100)               400       \n",
      "_________________________________________________________________\n",
      "dense_41 (Dense)             (None, 10)                1010      \n",
      "=================================================================\n",
      "Total params: 279,410\n",
      "Trainable params: 275,410\n",
      "Non-trainable params: 4,000\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 55000 samples, validate on 5000 samples\n",
      "Epoch 1/10\n",
      "55000/55000 [==============================] - 60s 1ms/sample - loss: 1.0961 - accuracy: 0.6136 - val_loss: 0.6769 - val_accuracy: 0.7478\n",
      "Epoch 2/10\n",
      "55000/55000 [==============================] - 52s 944us/sample - loss: 0.7713 - accuracy: 0.7241 - val_loss: 0.5596 - val_accuracy: 0.7992\n",
      "Epoch 3/10\n",
      "55000/55000 [==============================] - 52s 950us/sample - loss: 0.6598 - accuracy: 0.7662 - val_loss: 0.4977 - val_accuracy: 0.8278\n",
      "Epoch 4/10\n",
      "55000/55000 [==============================] - 53s 958us/sample - loss: 0.6042 - accuracy: 0.7881 - val_loss: 0.4502 - val_accuracy: 0.8368\n",
      "Epoch 5/10\n",
      "55000/55000 [==============================] - 55s 1000us/sample - loss: 0.5565 - accuracy: 0.8088 - val_loss: 0.4240 - val_accuracy: 0.8486\n",
      "Epoch 6/10\n",
      "55000/55000 [==============================] - 52s 948us/sample - loss: 0.5284 - accuracy: 0.8144 - val_loss: 0.4087 - val_accuracy: 0.8512\n",
      "Epoch 7/10\n",
      "55000/55000 [==============================] - 52s 953us/sample - loss: 0.4990 - accuracy: 0.8255 - val_loss: 0.3956 - val_accuracy: 0.8578\n",
      "Epoch 8/10\n",
      "55000/55000 [==============================] - 51s 935us/sample - loss: 0.4775 - accuracy: 0.8311 - val_loss: 0.3835 - val_accuracy: 0.8634\n",
      "Epoch 9/10\n",
      "55000/55000 [==============================] - 52s 947us/sample - loss: 0.4591 - accuracy: 0.8390 - val_loss: 0.3768 - val_accuracy: 0.8652\n",
      "Epoch 10/10\n",
      "55000/55000 [==============================] - 52s 948us/sample - loss: 0.4512 - accuracy: 0.8422 - val_loss: 0.3881 - val_accuracy: 0.8640\n"
     ]
    }
   ],
   "source": [
    "logdir = os.path.join('dnn-bn-callbacks')\n",
    "if not os.path.exists(logdir):\n",
    "    os.mkdir(logdir)\n",
    "output_model_file = os.path.join(logdir,'fashion_mnist_model.h5')\n",
    "\n",
    "# 定义回调函数\n",
    "callbacks = [\n",
    "    keras.callbacks.TensorBoard(log_dir=logdir,profile_batch = 100000000),\n",
    "    keras.callbacks.ModelCheckpoint(output_model_file,save_best_only=True),\n",
    "    keras.callbacks.EarlyStopping(patience=5,min_delta=1e-3),\n",
    "]\n",
    "history_bn = model.fit(x_train_scaled,y_train,epochs=10,\n",
    "                             validation_data=(x_valid_scaled,y_valid),\n",
    "                             callbacks=callbacks)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_learning_curves(history_bn)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 在测试集上进行指标评估\n",
    "model.evaluate(x_test_scaled,y_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 更改激活函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = keras.models.Sequential()\n",
    "# 构建模型\n",
    "model.add(keras.layers.Flatten(input_shape=[28,28]))\n",
    "for _ in range(20):\n",
    "    model.add(keras.layers.Dense(100, activation='selu'))\n",
    "model.add(keras.layers.Dense(10, activation='softmax'))\n",
    "\n",
    "# 模型编译，固化模型\n",
    "model.compile(loss='sparse_categorical_crossentropy',\n",
    "              optimizer='sgd',\n",
    "              metrics=['accuracy'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential_2\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "flatten_2 (Flatten)          (None, 784)               0         \n",
      "_________________________________________________________________\n",
      "dense_42 (Dense)             (None, 100)               78500     \n",
      "_________________________________________________________________\n",
      "dense_43 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_44 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_45 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_46 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_47 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_48 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_49 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_50 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_51 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_52 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_53 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_54 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_55 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_56 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_57 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_58 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_59 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_60 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_61 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_62 (Dense)             (None, 10)                1010      \n",
      "=================================================================\n",
      "Total params: 271,410\n",
      "Trainable params: 271,410\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 55000 samples, validate on 5000 samples\n",
      "Epoch 1/10\n",
      "55000/55000 [==============================] - 17s 311us/sample - loss: 0.5631 - accuracy: 0.7943 - val_loss: 0.4281 - val_accuracy: 0.8422\n",
      "Epoch 2/10\n",
      "55000/55000 [==============================] - 15s 273us/sample - loss: 0.4109 - accuracy: 0.8489 - val_loss: 0.3859 - val_accuracy: 0.8590\n",
      "Epoch 3/10\n",
      "55000/55000 [==============================] - 14s 263us/sample - loss: 0.3665 - accuracy: 0.8643 - val_loss: 0.3696 - val_accuracy: 0.8624\n",
      "Epoch 4/10\n",
      "55000/55000 [==============================] - 15s 273us/sample - loss: 0.3391 - accuracy: 0.8742 - val_loss: 0.3893 - val_accuracy: 0.8600\n",
      "Epoch 5/10\n",
      "55000/55000 [==============================] - 16s 284us/sample - loss: 0.3192 - accuracy: 0.8817 - val_loss: 0.3408 - val_accuracy: 0.8776\n",
      "Epoch 6/10\n",
      "55000/55000 [==============================] - 16s 287us/sample - loss: 0.3026 - accuracy: 0.8873 - val_loss: 0.3602 - val_accuracy: 0.8694\n",
      "Epoch 7/10\n",
      "55000/55000 [==============================] - 15s 274us/sample - loss: 0.2888 - accuracy: 0.8921 - val_loss: 0.3323 - val_accuracy: 0.8788\n",
      "Epoch 8/10\n",
      "55000/55000 [==============================] - 15s 278us/sample - loss: 0.2763 - accuracy: 0.8962 - val_loss: 0.3316 - val_accuracy: 0.8838\n",
      "Epoch 9/10\n",
      "55000/55000 [==============================] - 15s 276us/sample - loss: 0.2647 - accuracy: 0.9002 - val_loss: 0.3242 - val_accuracy: 0.8816\n",
      "Epoch 10/10\n",
      "55000/55000 [==============================] - 15s 267us/sample - loss: 0.2578 - accuracy: 0.9032 - val_loss: 0.3168 - val_accuracy: 0.8852\n"
     ]
    }
   ],
   "source": [
    "logdir = os.path.join('dnn-selu-callbacks')\n",
    "if not os.path.exists(logdir):\n",
    "    os.mkdir(logdir)\n",
    "output_model_file = os.path.join(logdir,'fashion_mnist_model.h5')\n",
    "\n",
    "# 定义回调函数\n",
    "callbacks = [\n",
    "    keras.callbacks.TensorBoard(log_dir=logdir,profile_batch = 100000000),\n",
    "    keras.callbacks.ModelCheckpoint(output_model_file,save_best_only=True),\n",
    "    keras.callbacks.EarlyStopping(patience=5,min_delta=1e-3),\n",
    "]\n",
    "history_selu = model.fit(x_train_scaled,y_train,epochs=10,\n",
    "                             validation_data=(x_valid_scaled,y_valid),\n",
    "                             callbacks=callbacks)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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4FxJy+WFKafBiV9wRsalU9PdShERkWEbfcHc+KEzPb3pz/DRm84UdW6ZMyKecS5MOxP8helupYiIyEEZVjAbY84FfoVzC6L7rLV39NtfBDwETI595s+stf8zIi2MhGHHit4p6sYPnPLK4+DUG2HGeTDxRE1Ri4hIVhgymI0xbuAu4JNALbDSGPO0tXZ9UrWvAuuttZ82xlQAm4wxD1trB95Zfji6mmHLX50w3vKCs6ra5YWpH4dF1zpT1CVTDuqjRUREMtlwRsyLgC3W2hoAY8yjwIVAcjBboMA4l+vKB5qAgdfa3J+GD2JT1M85U9Q24lxretb5sSnqMyCn4IA+UkREZLQx1qa47WByBWMuBs611n4ptn0lcLK19oakOgXA08AsnFsUX2qt/VOKz7oOuA6gsqJi4fO/+Q5ljSspa3yH3K5dALTnHUVj2Uk0li2irfAY55KYGay9vZ38/Px0N+OQZEMfQP3IJNnQB8iOfmRDHyB7+nHGGWesstaeuL86wxkxp7podf80PwdYA5wJTANeMMb8zVrb1udN1t4L3AuwcILPzl/7XXD7YOoSmHEzzDiH/OLJ5ANHDaNhmWD58uWj/iYW2dAHUD8ySTb0AbKjH9nQB8iefgzHcIK5FpiUtD0R2NWvzjXAHdYZfm8xxmzFGT2/PdiHhj15cOmDcPQZkDP6fwsSEREZCa5h1FkJTDfGTDXG+IDLcKatk30EnAVgjKkCZgI1+/vQbn8lHPtphbKIiEiSIUfM1tqwMeYG4Hmc06Xut9auM8ZcH9t/D3A78IAx5j2cqe9brLUNh7HdIiIiWWlY5zFba58Fnu1Xdk/S613A2SPbNBERkbFnOFPZIiIicoQomEVERDKIgllERCSDKJhFREQyiIJZREQkgyiYRUREMoiCWUREJIMomEVERDKIgllERCSDKJhFREQyiIJZREQkgyiYRUREMoiCWUREJIMomEVERDKIgllERCSDKJhFREQyiIJZREQkgyiYRUREMoiCWUREJIMomEVERDKIgllERCSDKJhFREQyiIJZREQkgyiYRUREMoiCWUREJIMomEVERDKIgllERCSDKJhFREQyiIJZREQkgyiYRUREMoiCWUREJIMomEVERDKIgllERCSDKJhFREQyiIJZREQkgyiYRUREMoiCWUREJIMomEVERDKIgllERCSDKJhFREQy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brqJmpoa/v73vzNr1ixKS0v5/Oc/T35+/oA7UomISHZTMPdz/PHHs2/fPiZMmMD48eO54oor+PSnP82JJ57I/PnzmTVr1gF/5r/8y79w/fXXM2fOHDweDw888AA5OTk89thjPPTQQ3i9XsaNG8f3vvc9Vq5cybe+9S1cLhder5e77777MPRSREQylYI5hffeey/xury8nDfffDNlvfb2dvbt25dy35QpU3j//fcB8Pv9KUe+t956K7feemufsnPOOYdzzjnnIFsuIiKjnY4xi4iIZBCNmA/RunXruP766/uU5eTk8NZbb6WpRSIiMpopmA/R8ccfz5o1a9LdDBERyRKayhYREckgCmYREZEMomAWERHJIApmERGRDKJgPgT7ux+ziIjIwVAwZ4FwOJzuJoiIyAjJ2NOl9vzoR/RsGNn7MeccO4tx3/72oPtH8n7M7e3tXHjhhSnf9+CDD/Kzn/0MYwxz587ld7/7HXv37uX666+npqYGgLvvvpvq6mrOP//8xBXEfvazn9He3s5tt93G0qVLOfXUU3n99de54IILmDFjBj/4wQ8IBoOUlZXx8MMPU1VVRXt7OzfeeCPvvPMOxhi+//3v09LSwvvvv88vf/lLAB544AG2bt3KL37xi0P6+YqIyKHL2GBOh5G8H7Pf7+epp54a8L7169fzwx/+kNdff53y8nKampoAuOmmmzj99NN56qmniEQitLe309zcvN/vaGlp4ZVXXgGgubmZFStWYIzhvvvu4yc/+Qk///nPuf322ykqKkpcZrS5uRmfz8fcuXP5yU9+gtfr5aGHHuK+++471B+fiIiMgIwN5v2NbA+Xkbwfs7WWb3/72wPe99JLL3HxxRdTXl4OQGlpKQAvvfQSDz74IABut5uioqIhg/nSSy9NvK6treXSSy9l9+7dBINBpk6dCsCLL77Io48+mqhXUlICwJlnnskzzzzDscceSygUYs6cOQf40xIRkcMhY4M5XeL3Y96zZ8+A+zF7vV6mTJkyrPsxD/Y+a+2Qo+04j8dDNBpNbPf/3ry8vMTrG2+8kZtvvpkLLriA5cuXc9tttwEM+n1f+tKX+NGPfsSsWbP4/Oc/P6z2iIjI4afFX/1cdtllPProozzxxBNcfPHFtLa2HtT9mAd731lnncWyZctobGwESExln3XWWYlbPEYiEdra2qiqqqKuro7G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\n",
      "text/plain": [
       "<Figure size 576x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def plot_learning_curves(history):\n",
    "    pd.DataFrame(history.history).plot(figsize=(8,5))\n",
    "    plt.grid(True)\n",
    "    plt.gca().set_ylim(0,1)\n",
    "    plt.show()\n",
    "plot_learning_curves(history_selu)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 在测试集上进行指标评估\n",
    "model.evaluate(x_test_scaled,y_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 添加Dropout\n",
    "\n",
    "AlphaDropout的好处：\n",
    "- 均值和方差不变\n",
    "- 归一化性质也不变"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = keras.models.Sequential()\n",
    "# 构建模型\n",
    "model.add(keras.layers.Flatten(input_shape=[28,28]))\n",
    "for _ in range(20):\n",
    "    model.add(keras.layers.Dense(100, activation='selu'))\n",
    "model.add(keras.layers.AlphaDropout(rate=0.5))\n",
    "model.add(keras.layers.Dense(10, activation='softmax'))\n",
    "\n",
    "# 模型编译，固化模型\n",
    "model.compile(loss='sparse_categorical_crossentropy',\n",
    "              optimizer='sgd',\n",
    "              metrics=['accuracy'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential_3\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "flatten_3 (Flatten)          (None, 784)               0         \n",
      "_________________________________________________________________\n",
      "dense_63 (Dense)             (None, 100)               78500     \n",
      "_________________________________________________________________\n",
      "dense_64 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_65 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_66 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_67 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_68 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_69 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_70 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_71 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_72 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_73 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_74 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_75 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_76 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_77 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_78 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_79 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_80 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_81 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "dense_82 (Dense)             (None, 100)               10100     \n",
      "_________________________________________________________________\n",
      "alpha_dropout (AlphaDropout) (None, 100)               0         \n",
      "_________________________________________________________________\n",
      "dense_83 (Dense)             (None, 10)                1010      \n",
      "=================================================================\n",
      "Total params: 271,410\n",
      "Trainable params: 271,410\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 55000 samples, validate on 5000 samples\n",
      "Epoch 1/10\n",
      "55000/55000 [==============================] - 17s 309us/sample - loss: 0.6895 - accuracy: 0.7696 - val_loss: 0.5918 - val_accuracy: 0.8446\n",
      "Epoch 2/10\n",
      "55000/55000 [==============================] - 15s 269us/sample - loss: 0.4520 - accuracy: 0.8457 - val_loss: 0.6115 - val_accuracy: 0.8560\n",
      "Epoch 3/10\n",
      "55000/55000 [==============================] - 16s 289us/sample - loss: 0.4024 - accuracy: 0.8607 - val_loss: 0.6652 - val_accuracy: 0.8564\n",
      "Epoch 4/10\n",
      "55000/55000 [==============================] - 16s 287us/sample - loss: 0.3710 - accuracy: 0.8705 - val_loss: 0.5322 - val_accuracy: 0.8738\n",
      "Epoch 5/10\n",
      "55000/55000 [==============================] - 15s 277us/sample - loss: 0.3482 - accuracy: 0.8785 - val_loss: 0.5127 - val_accuracy: 0.8658\n",
      "Epoch 6/10\n",
      "55000/55000 [==============================] - 15s 271us/sample - loss: 0.3247 - accuracy: 0.8850 - val_loss: 0.5553 - val_accuracy: 0.8746\n",
      "Epoch 7/10\n",
      "55000/55000 [==============================] - 15s 271us/sample - loss: 0.3108 - accuracy: 0.8897 - val_loss: 0.5545 - val_accuracy: 0.8774\n",
      "Epoch 8/10\n",
      "55000/55000 [==============================] - 15s 273us/sample - loss: 0.2996 - accuracy: 0.8929 - val_loss: 0.5312 - val_accuracy: 0.8840\n",
      "Epoch 9/10\n",
      "55000/55000 [==============================] - 15s 272us/sample - loss: 0.2878 - accuracy: 0.8960 - val_loss: 0.5923 - val_accuracy: 0.8820\n",
      "Epoch 10/10\n",
      "55000/55000 [==============================] - 15s 277us/sample - loss: 0.2809 - accuracy: 0.8996 - val_loss: 0.5133 - val_accuracy: 0.8854\n"
     ]
    }
   ],
   "source": [
    "logdir = os.path.join('dnn-selu-dropout-callbacks')\n",
    "if not os.path.exists(logdir):\n",
    "    os.mkdir(logdir)\n",
    "output_model_file = os.path.join(logdir,'fashion_mnist_model.h5')\n",
    "\n",
    "# 定义回调函数\n",
    "callbacks = [\n",
    "    keras.callbacks.TensorBoard(log_dir=logdir,profile_batch = 100000000),\n",
    "    keras.callbacks.ModelCheckpoint(output_model_file,save_best_only=True),\n",
    "    keras.callbacks.EarlyStopping(patience=5,min_delta=1e-3),\n",
    "]\n",
    "history_selu_dropout = model.fit(x_train_scaled,y_train,epochs=10,\n",
    "                             validation_data=(x_valid_scaled,y_valid),\n",
    "                             callbacks=callbacks)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_learning_curves(history_selu_dropout)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 在测试集上进行指标评估\n",
    "model.evaluate(x_test_scaled,y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
